import pandas as pd
from openpyxl import load_workbook

def read_excel(file_path, sheet_name='Sheet1'):
    """
    读取 Excel 文件并返回 DataFrame

    参数:
    - file_path (str): Excel 文件路径
    - sheet_name (str, int, list, or None, optional): 要读取的表单名称，默认为第一个表单

    返回:
    - df (pd.DataFrame): 读取的数据
    """
    try:
        df = pd.read_excel(file_path, sheet_name=sheet_name)
        return df
    except Exception as e:
        print(f"读取 Excel 文件时出错: {e}")
        return None

# 示例使用
# df = read_excel('example.xlsx', sheet_name='Sheet1')
# print(df)


def write_excel(df, file_path, sheet_name='Sheet1'):
    """
    将 DataFrame 写入 Excel 文件

    参数:
    - df (pd.DataFrame): 要写入的数据
    - file_path (str): 保存的 Excel 文件路径
    - sheet_name (str, optional): 表单名称，默认为'Sheet1'
    """
    try:
        df.to_excel(file_path, sheet_name=sheet_name, index=False)
        print(f"数据成功写入 {file_path}")
    except Exception as e:
        print(f"写入 Excel 文件时出错: {e}")

# 示例使用
# df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
# write_excel(df, 'output.xlsx', sheet_name='Data')


def append_to_excel(df, file_path, sheet_name='Sheet1'):
    """
    将 DataFrame 追加到现有的 Excel 文件

    参数:
    - df (pd.DataFrame): 要追加的数据
    - file_path (str): 保存的 Excel 文件路径
    - sheet_name (str, optional): 表单名称，默认为'Sheet1'
    """
    #from openpyxl import load_workbook

    try:
        # 加载现有的工作簿
        book = load_workbook(file_path)
        writer = pd.ExcelWriter(file_path, engine='openpyxl')
        writer.book = book

        # 获取现有表单数据
        try:
            existing_df = pd.read_excel(file_path, sheet_name=sheet_name)
        except ValueError:
            existing_df = pd.DataFrame()

        # 追加新数据
        final_df = pd.concat([existing_df, df], ignore_index=True)

        # 写入 Excel 文件
        final_df.to_excel(writer, sheet_name=sheet_name, index=False)
        writer.save()
        print(f"数据成功追加到 {file_path}")
    except Exception as e:
        print(f"追加数据到 Excel 文件时出错: {e}")

# 示例使用
# df_new = pd.DataFrame({'A': [7, 8, 9], 'B': [10, 11, 12]})
# append_to_excel(df_new, 'output.xlsx', sheet_name='Data')


def read_cell(file_path, sheet_name, cell):
    """
    读取 Excel 文件中特定单元格的数据

    参数:
    - file_path (str): Excel 文件路径
    - sheet_name (str): 表单名称
    - cell (str): 单元格位置（如'A1'）

    返回:
    - value: 单元格的值
    """
    #from openpyxl import load_workbook

    try:
        book = load_workbook(file_path, data_only=True)
        sheet = book[sheet_name]
        value = sheet[cell].value
        return value
    except Exception as e:
        print(f"读取单元格 {cell} 时出错: {e}")
        return None

# 示例使用
# cell_value = read_cell('example.xlsx', 'Sheet1', 'A1')
# print(cell_value)


def write_cell(file_path, sheet_name, cell, value):
    """
    向 Excel 文件中的特定单元格写入数据

    参数:
    - file_path (str): Excel 文件路径
    - sheet_name (str): 表单名称
    - cell (str): 单元格位置（如'A1'）
    - value: 要写入的值
    """
    #from openpyxl import load_workbook

    try:
        book = load_workbook(file_path)
        sheet = book[sheet_name]
        sheet[cell] = value
        book.save(file_path)
        print(f"数据成功写入单元格 {cell}")
    except Exception as e:
        print(f"写入单元格 {cell} 时出错: {e}")

# 示例使用
# write_cell('example.xlsx', 'Sheet1', 'A1', 'Hello, World!')
